package dao

import (
	"errors"
	"go_demo/internal/models"

	"gorm.io/gorm"
)
// 定义userdao结构体，返回一个数据库连接
type UserDao struct {
	db *gorm.DB
}

// 定义实例化userdao的方法
func NewUserDao(db *gorm.DB) *UserDao {
	return &UserDao{db: db}
}
// 通过id查找用户
func (ud *UserDao) GetUserByID(id uint) (*models.User, error) {
	var user models.User
	result := ud.db.First(&user, id)
	if result.Error != nil {
		return nil, result.Error
	}
	return &user, nil
}
// 新建用户
func (ud *UserDao) CreateUser(user *models.User) error {
	result := ud.db.Create(user)
	return result.Error
}
// 查找所有用户
func (ud *UserDao) GetAllUser() ([]models.User, error) {
	var users []models.User
	result := ud.db.Find(&users)
	if result.Error != nil {
		return nil, result.Error
	}
	return users, nil
}
// 通过id删除用户
func (ud *UserDao) DeleteUserById(id int) error {
	var user models.User
	result := ud.db.Delete(&user, id)
	if result.Error != nil {
		return result.Error
	}
	if result.RowsAffected == 0 {
		return errors.New("user not found")
	}
	return nil
}
// 更新用户
func (ud *UserDao) UpdateUser(id uint, user *models.User) error {
    result := ud.db.Model(&models.User{}).Where("id = ?", id).Updates(user)
    if result.Error != nil {
        return result.Error
    }
    if result.RowsAffected == 0 {
        return errors.New("user not found")
    }
    return nil
}
// 用户登录
func (ud *UserDao) UserLogin(name string) (*models.User, error) {
	var user models.User
	result := ud.db.First(&user, "name = ?",name)
	if result.Error != nil {
		return nil, result.Error
	}
	return &user, nil
}

